/*
 * @Author: moeWang
 * @Date: 2021-07-01 10:34:05
 * @LastEditTime: 2021-07-26 14:21:49
 * @LastEditors: moeWang
 * @Description:
 * @FilePath: \electron-demo\main.js
 */
// electron中的功能模块通过require方式引入
const { app, BrowserWindow, Menu, Tray } = require("electron");

const path = require("path");

// 保持对window对象的全局引用，如果不这么做的话，当JavaScript对象被
// 垃圾回收的时候，window对象将会自动的关闭
let win;

// 查看chromium版本号
console.log(process.versions.chrome);

/**
 *
 */
function createWindow() {
  // 创建浏览器窗口。
  win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: false, // https://www.lmlphp.com/user/10211/article/item/417608/ 为什么开启nodeIntegration后无法引用jQuery等
    },
    show: false,
  });

  // win.loadFile("index.html");
  win.loadURL("http://39.98.174.205:9202");
  // 打开开发者工具
  // win.webContents.openDevTools();
  win.once("ready-to-show", () => {
    setTimeout(() => {
      loading.hide();
      loading.close();
      
      win.show();
      if(process.platform === 'win32') {
        app.setUserTasks([
          {
            program: process.execPath,
            arguments: "--new-window",
            iconPath: process.execPath,
            iconIndex: 0,
            title: "新窗口",
            description: "Create a new window",
          },
        ]);
        // 窗口显示后设置
        // win.setThumbnailClip({
        //   x: 0,
        //   y: 0,
        //   width: 800,
        //   height: 600,
        // });
        win.setThumbarButtons([
          {
            tooltip: "后退",
            icon: path.join(__dirname, "prev-full.png"),
            click() {
              console.log("后退 clicked");
            },
          },
          {
            tooltip: "暂停",
            icon: path.join(__dirname, "zanting.png"),
            click() {
              console.log("暂停 clicked");
            },
          },
          {
            tooltip: "前进",
            icon: path.join(__dirname, "next-full.png"),
            click() {
              console.log("前进 clicked.");
            },
          },
        ]);
      }
    }, 2000);
  });
  // 当 window 被关闭，这个事件会被触发。
  win.on("closed", () => {
    // 取消引用 window 对象，如果你的应用支持多窗口的话，
    // 通常会把多个 window 对象存放在一个数组里面，
    // 与此同时，你应该删除相应的元素。
    win = null;
  });
}

function showLoading(cb) {
  loading = new BrowserWindow({
    show: false,
    frame: false,
    width: 300,
    height: 300,
    resizable: false,
    transparent: true,
  });

  // loading.maximize();
  loading.once("show", cb);
  loading.loadFile("loading.html");
  loading.show();
}
function createMenu() {
  const menus = [
    {
      label: "编辑",
      submenu: [
        { label: "剪切", role: "cut", accelerator: "ctrl+X" },
        { label: "复制", role: "copy", accelerator: "ctrl+C" },
        { label: "粘贴", role: "paste", accelerator: "ctrl+V" },
        { label: "删除", role: "delete" },
        { type: "separator" },
        { label: "撤销", role: "undo", accelerator: "ctrl+Z" },
        { label: "恢复", role: "redo", accelerator: "ctrl+Y" },
        { type: "separator" },
        { label: "全选", role: "selectAll", accelerator: "ctrl+A" },
      ],
    },
    {
      label: "查看",
      submenu: [
        { label: "刷新", role: "reload", accelerator: "ctrl+R" },
        { label: "强制刷新", role: "forceReload", accelerator: "ctrl+shift+R" },
        { label: "开发者工具", role: "toggleDevTools" },
      ],
    },
  ];

  const menu = Menu.buildFromTemplate(menus);
  Menu.setApplicationMenu(menu);
}

function createTray() {
  tray = new Tray(path.join(__dirname, "/go.png"));

  const TrayMenu = Menu.buildFromTemplate([
    {
      label: "刷新",
      click() {
        console.log("刷新");
      },
    },
    {
      label: "退出",
      click() {
        app.quit();
      },
    },
  ]);
  tray.setToolTip("");
  tray.setContextMenu(TrayMenu);
  tray.on("click", () => {
    console.log("托盘点击");
  });
}
// Electron 会在初始化后并准备
// 创建浏览器窗口时，调用这个函数。
// 部分 API 在 ready 事件触发后才能使用。
app.on("ready", () => {
  createMenu();
  createTray();
  showLoading(createWindow);
});

// 当全部窗口关闭时退出。
app.on("window-all-closed", () => {
  // 在 macOS 上，除非用户用 Cmd + Q 确定地退出，
  // 否则绝大部分应用及其菜单栏会保持激活。
  if (process.platform !== "darwin") {
    app.quit();
  }
});

app.on("activate", () => {
  // 在macOS上，当单击dock图标并且没有其他窗口打开时，
  // 通常在应用程序中重新创建一个窗口。
  if (win === null) {
    createWindow();
  }
});

// 在这个文件中，你可以续写应用剩下主进程代码。
// 也可以拆分成几个文件，然后用 require 导入。
// ////////////////////////////////////////////////////////
